\section{Implementation}
First the program loads in the training data and stores in a movie objects which represents a movie with a list of user ratings. After the training data is loaded, we load the probe data where the ratings for each user is found on each movie in the probe data. These user-movie ratings are then stored and that specific user-movie pairs are removed from the training data. This is done in order to secure data to measure the error rate of the CF model we are to implement. This also ensures that the model is not cheating by learning the answer.

Next we would use a library to compute the single value decomposition which we need to split and store in two matrices. Next we would calculate the error and use it train the model to get a lower error rate. The lower error rate will ensure a more accurate prediction. The product of the two matrices contains all ratings including the ones that were missing in the beginning. By doing the product between the two matrices for a user and movie we would get the predicted rating that the given user would have rated the given movie. We would have to add the user bias that we earlier had removed in order to take their personal opinion into account again. 

We chose to use matrix factorization because it provided shortcuts to calculate the results and therefore saves us a lot of computation time by compressing the data set without losing any of the valuable information. This is the case because the Netflix data set is vast and contains a lot of noise which can be reduced.